package com.leo.base_project.module.chart;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.LimitLine;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;

import java.util.ArrayList;

/*
 * 类名：ChartUtils
 * 功能：主要是画折线图为主，可以加个饼图
 * 创建时间: 2021/9/1 8:53
 * 创建者：Leo
 */
public class LineChartModule {

    LineChart mLineChart;
    LineChartImpl lineChartImpl;
    ArrayList<Entry> data;
    String tag;
    // 限制最多有多少数据
    int dataLimit;

    /*
     * 功能：调用方法，初始化折线图
     * 输入：[lineChart] 折线图对象
     *      [data] 数组，需要提前初始化
     *      [tag] 标签，当前单线的标签
     *      [dataLimit] 当前折线图最多添加几个数据，-1为无限制
     * 创建时间: 2021/9/1 9:08
     * 创建者：Leo
     */
    public LineChartModule(LineChart lineChart, ArrayList<Entry> data, String tag, int dataLimit) {
        mLineChart = lineChart;
        lineChartImpl = new LineChartImpl();
        // 多此一举 ？
        mLineChart = lineChartImpl.initLineChart(mLineChart);
        this.data = data;
        this.tag = tag;
        this.dataLimit = dataLimit;
        lineChartImpl.setData(data, tag);
    }

    public LimitLine setLimitLine(float limit, String label) {
        if (lineChartImpl == null) return null;
        LimitLine limitLine = new LimitLine(limit, label);
        lineChartImpl.setLimitLine(limitLine);
        return limitLine;
    }

    public void bindLimitLine(LimitLine limitLine, boolean left) {
        if (mLineChart == null) return;
        if (left) {
            mLineChart.getAxisLeft().addLimitLine(limitLine);
        } else {
            mLineChart.getAxisRight().addLimitLine(limitLine);
        }
    }

    public void setRange(float max, float min) {
        if (mLineChart == null) return;
        YAxis leftAxis = mLineChart.getAxisLeft();
        //y轴最大
        leftAxis.setAxisMaximum(max);
        //y轴最小
        leftAxis.setAxisMinimum(min);
    }

    /*
     * 功能：在初始化完成后添加新数据
     * 输入：[entry] 一个float，float的键值对
     * 输出：[boolean] true指成功
     * 创建时间: 2021/9/1 9:22
     * 创建者：Leo
     */
    public boolean addData(Entry entry) {
        if (data == null) return false;
        data.add(entry);
        if (dataLimit != -1 && data.size() > dataLimit) {
            data.remove(0);
        }
        lineChartImpl.setData(data,tag);
        return true;

    }

}
